1018. 可被 5 整除的二进制前缀【简单】
1. 📝 题目描述
给定一个二进制数组 nums (索引从 0 开始)。
我们将 xi 定义为其二进制表示形式为子数组 nums[0..i] (从最高有效位到最低有效位)。
- 例如,如果
nums =[1,0,1],那么x0 = 1,x1 = 2, 和x2 = 5。
返回布尔值列表 answer,只有当 xi 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。
示例 1:
txt
输入:nums = [0,1,1]
输出:[true,false,false]
解释:
输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3。
只有第一个数可以被 5 整除,因此 answer[0] 为 true。1
2
3
4
5
6
2
3
4
5
6
示例 2:
txt
输入:nums = [1,1,1]
输出:[false,false,false]1
2
2
提示:
1 <= nums.length <= 10^5nums[i]仅为0或1
2. 🎯 s.1 - 暴力解法
js
/**
* @param {number[]} nums
* @return {boolean[]}
*/
var prefixesDivBy5 = function (nums) {
const res = []
let mod = 0
for (const b of nums) {
mod = (mod * 2 + b) % 5
res.push(mod === 0)
}
return res
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 时间复杂度:
,其中 为数组长度,只需遍历一次数组 - 空间复杂度:
,仅使用了常数个变量(不计入返回结果)
算法思路:
- 维护当前前缀的取模值
mod,每次更新为(mod * 2 + b) % 5 - 若
mod == 0则当前前缀能被 5 整除 - 将所有满足条件的结果记录在
res中返回